package top.guoziyang.mydb.backend.utils;


public class Types {
    /**
     *将页面号和偏移量整合为一个long类型的值，使得每个DataItem都可以使用一个唯一的值uid来标识
     * 方法:  u0 << 32：将u0向左移动32位，把页面号部分移到long的高32位
     *      | u1：利用位或倾斜位，将u1的低32位（偏移量部分）与u0高32位（页面号部分）合并，生成一个64位的long值
     *  返回最终的结果是一个64位的long值，其中：
     *      高32位表示pgno（页码）。
     *      低32位表示offset（页面内偏移量）
     */
    public static long addressToUid(int pgno, short offset) {
        long u0 = (long)pgno;
        long u1 = (long)offset;
        return u0 << 32 | u1;
    }
}
